/*
 *
 * 通用工具方法
 */
// import dayjs from 'dayjs';
// import { Notify } from 'vant';
// 时间不满两位前加0
// var timeFormat = function (t) {
//   if (t <= 9) {
//     return '0' + t;
//   } else {
//     return t;
//   }
// };
window.timer = null;
let timerId = 1; // 模拟计时器id，唯一性
let timerObj = {};
export default {
  // 序列化数制
  // &id=2&vaule=3方式显示
  serialize(form) {
    var parts = [];
    for (var pair in form) {
      parts.push(pair + '=' + form[pair]);
    }
    return parts.join('&');
  },
  // 将对名转成FormData，可转数组 this.objectToFormData(obj)
  objectToFormData(obj, form, namespace) {
    var _formData = form || new FormData();
    var formKey;
    if (obj instanceof Array) {
      for (var a = 0; a < obj.length; a++) {
        if (typeof obj[a] === 'object' && !(obj[a] instanceof File)) {
          this.objectToFormData(obj[a], _formData, namespace + '[' + a + ']');
        } else {
          // 若是数组则在关键字后面加上[]
          _formData.append(namespace + '[' + a + ']', obj[a]);
        }
      }
    } else {
      for (var property in obj) {
        if (obj.hasOwnProperty(property) && obj[property]) {
          if (namespace) {
            // 若是对象，则这样
            formKey = namespace + '.' + property;
          } else {
            formKey = property;
          }
          if (typeof obj[property] === 'object' && !(obj[property] instanceof File)) {
            this.objectToFormData(obj[property], _formData, formKey);
          } else {
            _formData.append(formKey, obj[property]);
          }
        }
      }
    }
    return _formData;
  },
  // 2个对象是否相等
  isObjEqual(o1, o2) {
    var props1 = Object.getOwnPropertyNames(o1);
    var props2 = Object.getOwnPropertyNames(o2);
    if (props1.length !== props2.length) {
      return false;
    }
    for (var i = 0, max = props1.length; i < max; i++) {
      var propName = props1[i];
      if (o1[propName] !== o2[propName]) {
        return false;
      }
    }
    return true;
  },
  // 保留2位小数
  toFixed(str) {
    var _str = str.replace(/\.{2,}/g, '.').replace(/[^\d.]/g, '');
    if (_str) {
      return _str.match(/^\d+(?:\.\d{0,2})?/)[0];
    } else {
      return _str;
    }
  },
  // 重写定时方法
  setInterval (cb, time) {
    var key = 'interval_' + timerId;
    timerId++;
    timerObj[timerId] = true;
    function timerFn () {
      if (!timerObj[timerId]) return;
      cb && cb();
      timerObj[key] = setTimeout(timerFn, time || 3000);
    }
    timerFn();
    return timerObj[key];
  },
  // 格式化参数
  formatKey (data) {
    let dType = Object.prototype.toString.call(data);
    if (dType === '[object Object]') {
      return this.transformKey(data);
    } else if (dType === '[object Array]') {
      return data.map(o => {
        return this.transformKey(o);
      });
    } else {
      return data;
    }
  },
  // 特殊字符过滤
  filtersNickName(str) {
    var strArr = str.split('');
    var result = '';
    var totalLen = 0;
    for (var idx = 0; idx < strArr.length; idx++) {
      // 超出长度,退出程序
      if (totalLen >= 16) break;
      var val = strArr[idx];
      // 英文,增加长度1
      if (/[a-zA-Z]/.test(val)) {
        totalLen = 1 + (+totalLen);
        result += val;
      } else if (/[\u4e00-\u9fa5]/.test(val)) { // 中文,增加长度2
        totalLen = 2 + (+totalLen);
        result += val;
      } else if (/[\ud800-\udfff]/.test(val)) {
        if (/[\ud800-\udfff]/.test(strArr[idx + 1])) {
          // 跳过下一个
          idx++;
        }
        // 将代理对替换为 "口"
        result += '口';
      }
    }
    return result;
  }
};
